package dao;

import hbt.HibernateUtil;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import Dominio.ListaDescuentos;
import Dominio.ItemDescuento;
import Dominio.Proveedor;


public class ListaDescuentosDAO {

	private static ListaDescuentosDAO instancia = null;
	private static SessionFactory sf = null;
	private Session session = null;
	
	public static ListaDescuentosDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new ListaDescuentosDAO();
		} 
		return instancia;
	}
	
	private Session getSession(){
		if(session == null || !session.isOpen())
			session = sf.openSession();
		return session;
	}
	
	public void closeSession(){
		if (session.isOpen()) session.close();
	}
	
	public void persistListaDescuento(ListaDescuentos ld){
		Session s=getSession();
		s.beginTransaction();
		s.persist(ld);
		s.flush();
		s.getTransaction().commit();
	}
	
	public ItemDescuento persistItemListaDescuento(ItemDescuento item){
		Session s=getSession();
		s.beginTransaction();
		s.persist(item);
		s.flush();
		s.getTransaction().commit();
		return item;
	}
	
	//El numeroListaPrecios es el ID que se genera
	public ListaDescuentos getListaDescuento(int numeroListaDescuento){
		Session s=getSession();
		s.beginTransaction();
		ListaDescuentos lista = (ListaDescuentos)s.load(ListaDescuentos.class, new Integer(numeroListaDescuento));
		s.getTransaction().commit();
		return lista;
	}
	
	public ItemDescuento getItemListaDescuento(int idItemListaDescuento){
		Session s=getSession();
		s.beginTransaction();
		ItemDescuento item = (ItemDescuento)s.load(ItemDescuento.class, new Integer(idItemListaDescuento));
		s.getTransaction().commit();
		return item;
	}
	
	@SuppressWarnings("unchecked")
	public List<ListaDescuentos> listaDeProveedor(Proveedor prov){
	
	int idProv = prov.getId();	
		
	Session s = this.getSession();
	List<ListaDescuentos> lista= s.createQuery("from ListaDescuentos ld where ld.idProveedor = :id").setParameter("id", idProv).list();
	return lista;
	}

	@SuppressWarnings("unchecked")
	public List<ItemDescuento> listaDeItemsDeListaDePrecio (ListaDescuentos ld){
	
	int idLD = ld.getId();
		
	Session s = this.getSession();
	
	List<?> lista = s.createQuery("from ItemDescuento ild where ild.idListaDeDescuento = :id").setParameter("id", idLD).list();
	return (List<ItemDescuento>)lista;
	}
}
